home *** CD-ROM | disk | FTP | other *** search
/ Assembly Language Step by Step / Assembly Language Step by Step.mdf / ForDOS / ASM / SHOWCHAR.ASM < prev    next >
Assembly Source File  |  1999-12-12  |  3KB  |  55 lines

  1. ;  Source name     : SHOWCHAR.ASM
  2. ;  Executable name : SHOWCHAR.COM
  3. ;  Code model:     : Real mode flat model
  4. ;  Version         : 1.0
  5. ;  Created date    : 9/18/1999
  6. ;  Last update     : 9/18/1999
  7. ;  Author          : Jeff Duntemann
  8. ;  Description     : A simple example of a DOS .COM file programmed for
  9. ;                    real mode flat model, using NASM 0.98 and ALINK.
  10. ;                    This program demonstrates how multi-line macros are
  11. ;                    used with NASM.
  12.  
  13. [BITS 16]                   ; Set 16 bit code generation
  14. [ORG 0100H]                 ; Set code start address to 100h (COM file)
  15.  
  16. [SECTION .text]             ; Section containing code
  17.  
  18. %include "MYLIB.MAC"        ; Load in screen control macro library
  19.  
  20. START:                      ; This is where program execution begins:
  21.  
  22.            Clear VidOrigin,0720H,4000  ; Clear full video buffer to spaces
  23.            ; Show a 64-character rule above the table display:
  24.            Ruler VidOrigin,LineLen,ScrnWidth,0,LinesDown-1
  25.            les    DI,[VidOrigin]   ; Put vid seg in ES & offset in DI
  26.            add    DI,ScrnWidth*LinesDown*2 ; Start table display down a ways
  27.            mov    CX,256      ; There are 256 chars in the ASCII set
  28.            mov    AX,0700H    ; Start with char 0, attribute 7
  29.  
  30. DoLine:    mov    BL,LineLen  ; Each line will consist of 64 characters
  31. DoChar:    stosw              ; Note that there's no REP prefix!
  32.            jcxz   AllDone     ; When the full set is printed, quit
  33.            inc    AL          ; Bump the character value in AL up by 1
  34.            dec    BL          ; Decrement the line counter by one
  35.            loopnz DoChar      ; Go back & do another char until BL goes to 0
  36.            add    DI,(ScrnWidth - LineLen)*2 ; Move DI to start of next line
  37.            jmp    DoLine      ; Start display of the next line
  38.  
  39. AllDone:   GotoXY 0,12        ; Move hardware cursor down below char. table
  40.            mov    AH,4CH      ; Terminate process DOS service
  41.            mov    AL,0        ; Pass this value back to ERRORLEVEL
  42.            int    21H         ; Control returns to DOS
  43.  
  44. [SECTION .data]              ; Section containing initialised data
  45.  
  46. LRXY       DW      184FH ; 18H = 24D; 4FH = 79D; 0-based XY of LR screen corner
  47.  
  48. VidOrigin  DD      0B8000000H   ; Change to 0B0000000H if you have a mono CRT!
  49. CRLF       DB      0DH,0AH
  50.  
  51. ScrnWidth  EQU     80        ; Width of the screen in characters
  52. LineLen    EQU     64        ; Length of one line of the ASCII table
  53. LinesDown  EQU      4        ; Number of lines down to start ASCII table
  54.  
  55.